// 对象的定义----------------------------------------------------


/*
	JavaScript 定义了 5 种原始数据类型：
	1.string
	2.number
	3.boolean
	4.null
	5.undefined
*/


// 创建对象的方式

/*
	1.定义和创建单个对象，使用对象文字。
	2.定义和创建单个对象，通过关键词 new。
	3.定义对象构造器，然后创建构造类型的对象。

*/

let car = {
	color: "black"
}

let car1 = car;
console.log(car1);

car1.color = "yellow";
console.log(car);

// 对象的属性----------------------------------------------------
console.log(car["color"]);

// 循环遍历对象的属性
for (x in car) {
	console.log(x);
	//注意：通过变量访问属性时 需要用到 person[] 的形式方法
	console.log(car[x]);
}

// 添加属性
car.size = "big";
console.log(car);

// 删除属性
delete car.color;
console.log(car);

// 对象的方法----------------------------------------------------
car.driver = function () {
		console.log("小车在跑");
}
console.log(car);

// 对象的显示----------------------------------------------------

// Object.values()，任何 JavaScript 对象都可以被转换为数组


let cars = Object.values(car);
console.log(typeof cars, cars);



// 对象访问器----------------------------------------------------

let person = {
	name: "zhangsan",
	age: 1,

	get getName() {
		return this.name;
	},
	set setName(name) {
		this.name = name;
	}
}

console.log(person.getName);
person.setName = "lisi";
console.log(person.getName);

// Object.defineProperty() 方法也可用于添加 Getter 和 Setter （从对象外部添加）


// 对象构造器----------------------------------------------------

// 构造函数使用的名称是大写
function Person(name, age) {
	this.name = name;
	this.age = age;
	this.sex1 = "nan";
}

let person1 = new Person("zhangsan", 1);
console.log(person1);

// 向已有对象添加属性和方法
person1.sex = "男";
person1.eat = function() {
	console.log("吃");
}
console.log(person1);

// 添加不了
Person.sex1 = "nan";

console.log(person1.sex1);


// 对象原型----------------------------------------------------

Person.prototype.sex2 = "nv";
console.log(person1.sex2);





